package person

import (
	"errors"
)

/*
*
1.接口中的方法：必须大写开头，因为接口本身就是用来被其他包使用的契约
2.实现接口的方法：必须大写开头，因为它们需要与接口中的方法签名匹配
3.结构体类型：如果只在包内使用，可以小写；如果需要被其他包访问，则需要大写
4.构造函数：如果需要被其他包调用，则需要大写开头（Go 通常使用 NewXxx 命名）
5.普通函数和方法：只在包内使用的小写，需要被其他包访问的大写
*/
var _ Eat = (*eat)(nil)

type eat struct {
	Name string
}

// 接口 必须要大写开头 不能使用驼峰法
type Eat interface {
	Eat(msg string) string
	NotEat(msg string) string
}

func (s *eat) Eat(msg string) string {
	return s.Name + "喝" + msg
}

func (s *eat) NotEat(msg string) string {
	return s.Name + " 不喝 " + msg
}

func NewEat(name string) (Eat, error) {
	if name == "" {
		return nil, errors.New("name is empty")
	}

	return &eat{
		Name: name,
	}, nil
}
